<html>
    <head>
        <title>执行同步调用</title>
    </head>
    <body>
        <script>
            /*
                  7、执行同步调用

                                                如果不需要异步工作，框架将处理调用同步Involke方法。

                                                以下方法将创建同步Invoke视图组件：

                                                        using Microsoft.AspNetCore.Mvc;
                                                        using ViewComponentSample.Models;

                                                        namespace ViewComponentSample.ViewComponents
                                                        {
                                                            public class PriorityListSync : ViewComponent
                                                            {
                                                                private readonly ToDoContext db;

                                                                public PriorityListSync(ToDoContext context)
                                                                {
                                                                    db = context;
                                                                }

                                                                public IViewComponentResult Invoke(int maxPriority, bool isDone)
                                                                {
                                                        
                                                                    var x = db!.ToDo!.Where(x => x.IsDone == isDone &&
                                                                                        x.Priority <= maxPriority).ToList();
                                                                    return View(x);
                                                                }
                                                            }
                                                        }

                                                视图组件的 Razor文件：

                                                        <div>
                                                            Testing nameof(PriorityList) <br />

                                                            Maxium Priority: @ViewData["maxPriority"] <br />
                                                            Is Complete:  @ViewData["isDone"]
                                                            @await Component.InvokeAsync(nameof(PriorityListSync),
                                                                            new { 
                                                                                maxPriority =  ViewData["maxPriority"],
                                                                                isDone = ViewData["isDone"]  }
                                                                            )
                                                        </div>

                                                使用以下方法之一在 Razor 文件（例如 Views/Home/Index.cshtml）中调用视图组件：

                                                        ①、IViewComponentHelper

                                                        ②、标签助手

                                                        若要使用 IViewComponentHelper 方法，请调用 Component.InvokeAsync：

                                                                @await Component.InvokeAsync(nameof(PriorityList),new { maxPriority = 4, isDone = true })

                                                        若要使用标签助手，请使用 @addTagHelper 指令注册包含视图组件的程序集（视图组件位于名为 MyWebApp 的程序集中）：

                                                                @addTagHelper *, MyWebApp

                                                        然后，在 Razor 标记文件中使用视图组件标记帮助程序：

                                                                <vc:priority-list max-priority="999" is-done="false">
                                                                </vc:priority-list>


                                                （PriorityList.Invoke 的方法签名是同步的，但 Razor 在标记文件中使用 Component.InvokeAsync 找到并调用该方法。）
            */
        </script>
    </body>
</html>